import 'package:flutter/material.dart';

class CommonAppBar extends StatelessWidget implements PreferredSizeWidget {
  /**
   * todo 当使用带参数的构造方法时，需要指定对应的参数名称，否则构造方法无法指定具体对哪个参数进行赋值，
   * todo 当参数不要钱强制指定时，需要对参数进行初始赋值
   */
  const CommonAppBar(
      {super.key,
      required this.bgColor,
      // todo 当调用构造方法不针对该参数赋值时，使用默认的赋值，如果参数可空，则需要在声明时使用?来表示
      this.elevationValue = 0,
      required this.titleName,
      required this.titleColor,
      required this.titleSize});

  final Color bgColor; // 指定背景的颜色
  // final Color shadowColor;// 指定阴影的颜色
  final double elevationValue; //
  //----------------------------------------------------------------
  // 标题部分的参数
  final String titleName; // 标题
  final Color titleColor; // 标题文字颜色
  final double titleSize; // 标题文字大小
  //----------------------------------------------------------------

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return AppBar(
      backgroundColor: bgColor,
      // 阴影深度
      elevation: 0,
      // 阴影颜色
      shadowColor: Color(0x33000000),
      leading: IconButton(
        // 指定左边的图片
        iconSize: 22,
        // todo 说明：想要使用 assets路径下的文件，需要在pubspec.yaml中进行对应路径的注册，否则无法使用对应路径中的文件
        // https://blog.csdn.net/u011578734/article/details/111935285
        // todo  【资源访问】
        icon: Image.asset('assets/images/ic_back_of_light.png'),
        onPressed: () async {
          // 执行返回动作
          Navigator.pop(context);
        },
      ),
      title: Text(
        titleName,
        style: TextStyle(
          color: titleColor,
          fontStyle: FontStyle.normal,
          fontWeight: FontWeight.w500,
          fontSize: titleSize,
        ),
      ),
      centerTitle: true,
      // 右边的按钮或文字,如果不需要指定，则设置为空即可
      actions: [],
      // AppBar底部的组件，可以构造Tab等，这里由于只构建最基础的，所示不进行实现
      bottom: null,
    );
  }

  @override
  // TODO: implement preferredSize
  Size get preferredSize => AppBar().preferredSize;
}
